package org.csy.generic.test06;

import java.util.ArrayList;
import java.util.List;

/**
 * 型变
 *  1）不变：赋值运行符左右两边的泛型必须一致
 *
 *  2）协变：子类型的泛型可以赋值给父类型的泛型 - 通配符
 *   类<? extends 父类> 对象 = new 类<子类>()
 *   ArrayList<? extends Animal> list = new ArrayList<Cat>();
 *
 *  3）逆变
 *
 * @author CSY
 * @date 2025 - 03 - 27
 */
public class MainTest01 {
    public static void main(String[] args) {
        //正确 - 多态 - 父类对象可以接收任意的子类对象 - 协变性
        Animal a = new Dog();

        //错误 - 泛型不支持协变性
        //等号左右两边的泛型必须一致 - 泛型的不变性
//        List<Animal> list = new ArrayList<Dog>();
        List<Animal> list = new ArrayList<>();
//        list.add(a);

        //如何实现像多态一样实现协变性 - 通配符


    }
}
